Skip to content

Azure insurance agent platform — ALZ, policy-as-code, low-code connectors#2

Open
realjkg wants to merge 6 commits into
mainfrom
claude/insurance-app-agent-governance-7vE7n
Open

Azure insurance agent platform — ALZ, policy-as-code, low-code connectors#2
realjkg wants to merge 6 commits into
mainfrom
claude/insurance-app-agent-governance-7vE7n

Conversation

@realjkg
Copy link
Copy Markdown
Owner

@realjkg realjkg commented May 12, 2026

Summary

Adds an azure/ directory implementing a low-code-first insurance application
(Power Platform + Copilot Studio) plus API connectors, deployed inside an Azure
Landing Zone
with policy-as-code governance and secure, traceable,
governed AI agent identities — built to the Microsoft Cloud Adoption
Framework guidance "Govern and secure AI agents across your organization".
Creates an Application Platform landing zone if the tenant doesn't have one.

What's in it

  • azure/landing-zones/application-platform/ — creates the Application
    Platform management group if absent, vends/associates the insurance-app
    Application landing zone subscription, spoke network peered to the connectivity
    hub, central Log Analytics + Microsoft Sentinel + Defender for Cloud AI threat
    protection, platform identities, and the ai-agents Conditional Access group.
  • azure/policy-as-code/ — 7 Azure Policy definitions (allowed regions,
    approved models only, deny public network access, disable local auth, audit
    managed identity on agent hosts, diagnostics → central workspace, require
    ownership/classification tags) + the ai-agent-governance initiative + a
    Terraform assignment at the Application Platform MG.
  • azure/workloads/insurance-app/ — per-agent Entra Agent ID / user-assigned
    managed identities (no secrets, scoped RBAC, CA-group membership), Power
    Platform managed environments + tenant/environment DLP classifying the widest
    certified connector set, internal-VNet API Management fronting bespoke
    insurance APIs as governed custom connectors, Azure AI Foundry + Azure OpenAI
    (approved models, Entra-only, private), AI Search, Content Safety, Key Vault,
    per-agent Application Insights, private endpoints — all behind cost/network
    posture toggles (enable_private_endpoints, enable_vnet_injection,
    apim_sku_name, ai_search_*, key_vault_purge_protection).
  • azure/docs/caf-ai-agent-governance-mapping.md — control-by-control
    traceability to the CAF article.
  • azure/QUICKSTART-portal.md — click-by-click portal path, mapped to each
    Terraform file.
  • azure/COSTS.md + azure/profiles/{dev-demo,prod}/ — monthly cost
    breakdown + teardown guide, and ready-made variable sets: a ~$80–150/mo demo
    posture (public endpoints, Consumption APIM, basic/free AI Search, policies in
    Audit) and a production posture (private endpoints, Internal-VNet Premium APIM,
    S1 search, policies enforced).
  • .github/workflows/azure-iac.yml + .tflint.hcl + .spectral.yaml
    — PR/push CI: terraform fmt -check, tflint (terraform + azurerm rulesets)
    per module, terraform init -backend=false + validate per module, Azure
    Policy JSON structural lint, Spectral OpenAPI lint.

Sample connector specs, terraform.tfvars.example files, and azure/README.md
tying it together are included. gke/ and the Go webhooks are untouched.

Lint / checks run locally

  • terraform fmt -check -recursive azure — clean
  • tflint (bundled terraform ruleset) — passes on all three modules
  • All 8 policy JSON files validate; connector OpenAPI YAML and the CI workflow YAML parse
  • terraform validate / the azurerm tflint plugin couldn't run here (the
    Terraform Registry is firewalled in this environment) — those steps run in the
    GitHub Actions workflow

Test plan

  • CI (azure-iac) green: fmt, tflint (+azurerm), terraform validate per module, policy JSON lint, Spectral
  • terraform plan for landing-zones/application-platform against a sandbox subscription (with real hub/MG IDs)
  • terraform plan for policy-as-code/initiative at the Application Platform MG scope
  • terraform plan for workloads/insurance-app using profiles/dev-demo/insurance-app.tfvars
  • Confirm terraform destroy of the dev-demo stack leaves nothing lingering (no purge-protected Key Vault, Consumption APIM, basic AI Search)
  • Verify the ai-agent-governance initiative reports compliant after a workload apply
  • Provider versions / resource schemas are current (azurerm ~4.x, azuread ~3.x, microsoft/power-platform ~3.x) — bump if needed

https://claude.ai/code/session_019dW7abpVbYmhfiLdTtBLki


Generated by Claude Code

claude added 6 commits May 12, 2026 20:38
…nectors

Implements a low-code-first insurance application governed per the Microsoft
CAF "Govern and secure AI agents across your organization" guidance:

- landing-zones/application-platform: creates the Application Platform
  management group if absent, vends the insurance-app Application landing
  zone, spoke network peered to the hub, central Log Analytics + Sentinel +
  Defender for Cloud AI threat protection, platform identities and the
  ai-agents Conditional Access group.
- policy-as-code: Azure Policy definitions + the ai-agent-governance
  initiative (allowed regions/models, deny public network access, disable
  local auth, managed identity on agent hosts, diagnostics to central
  workspace, ownership/classification tags) assigned at the Application
  Platform MG.
- workloads/insurance-app: per-agent Entra Agent ID / user-assigned managed
  identities (no secrets, scoped RBAC, CA group), Power Platform managed
  environments + tenant/environment DLP classifying the widest certified
  connector set, internal-VNet APIM fronting bespoke insurance APIs as
  governed custom connectors, Azure AI Foundry + Azure OpenAI (approved
  models, Entra-only, private), AI Search, Content Safety, Key Vault, per-agent
  Application Insights, and private endpoints.
- docs/caf-ai-agent-governance-mapping.md: control-by-control traceability.

https://claude.ai/code/session_019dW7abpVbYmhfiLdTtBLki
- .github/workflows/azure-iac.yml: PR + push CI for azure/ — terraform fmt
  -check, tflint (terraform + azurerm rulesets) per module, terraform init
  -backend=false + validate per module, Azure Policy JSON structural lint,
  and Spectral OpenAPI lint of the connector specs.
- .tflint.hcl: terraform "recommended" preset + azurerm ruleset plugin.
- .spectral.yaml: spectral:oas ruleset, relaxed for template connector specs.
- Reformatted all azure/ Terraform with `terraform fmt -recursive`
  (whitespace/alignment only; no behavioural change). Verified tflint passes
  on all three modules with the bundled terraform ruleset.

https://claude.ai/code/session_019dW7abpVbYmhfiLdTtBLki
azure/QUICKSTART-portal.md: click-by-click path (Azure portal, Power Platform
admin center, Copilot Studio, AI Foundry, APIM, Purview) to stand up a governed
agent, with each step mapped back to the corresponding Terraform file. Linked
from azure/README.md.

https://claude.ai/code/session_019dW7abpVbYmhfiLdTtBLki
- azure/COSTS.md: monthly cost breakdown (per-component pricing models, the five
  knobs that move the needle, model token pricing, Power Platform licensing) and
  a teardown guide (soft-delete/purge-protection gotchas, MG/subscription
  behaviour, what actually stops billing, cheapest create-demo-delete loop).
- azure/profiles/{dev-demo,prod}/{application-platform,insurance-app}.tfvars +
  profiles/README.md: a ~$80-150/mo demo posture (public endpoints, Consumption
  APIM, basic/free AI Search, no purge protection, 1 env/1 agent, policies in
  Audit) and a production posture (private endpoints, Internal-VNet Premium APIM,
  S1 search 1x3, dev/test/prod, 4 agents, policies enforced).
- New workload variables wired through: enable_private_endpoints,
  enable_vnet_injection, apim_sku_name, ai_search_replica_count/partition_count,
  key_vault_purge_protection; spoke_subnet_ids now optional. Private endpoints
  and the Power Platform VNet enterprise policy are count-gated; APIM VNet config
  is a dynamic block; AI/PaaS public-network-access derives from the toggle.
- terraform fmt clean; tflint passes on all three modules.

https://claude.ai/code/session_019dW7abpVbYmhfiLdTtBLki
Sweeps the in-repo identifiers: aptumcloud -> adaptcloud, Aptum Cloud ->
Adapt Cloud, "Aptum Insurance Platform" -> "Adapt Insurance Platform",
APTUMCLOUD_DEV -> ADAPTCLOUD_DEV, aptum-k8s -> adapt-k8s, @aptum.example ->
@adapt.example, aptumcloud.com -> adaptcloud.com, realjkg/aptumcloud ->
realjkg/adaptcloud (CI/CD repo + workload-identity-federation subjects).

The GitHub repo rename itself (realjkg/aptumcloud -> realjkg/adaptcloud) must
be done in repo Settings; remotes / OIDC subjects / the tooling allow-list need
repointing afterwards. Note: adaptcloud.com is a domain and the GCS bucket name
adaptcloud-k8s-docker-registry is globally unique — both need to actually exist.

terraform fmt -check (azure/) clean; tflint passes on all three azure modules;
policy JSON valid. (gke/main.tf has a pre-existing parse error at line 108 that
predates this change and is out of scope.)

https://claude.ai/code/session_019dW7abpVbYmhfiLdTtBLki
Line ~108 had an unterminated resource block (`resource "kubernetes_namespace"
"logging` with no closing quote/brace) that made the whole file unparseable.
Completed it as a valid kubernetes_namespace resource. gke/main.tf now parses
(`terraform fmt -check` no longer errors); the rest of that file's pre-existing
WIP issues are left untouched. azure/ fmt + tflint unaffected.

https://claude.ai/code/session_019dW7abpVbYmhfiLdTtBLki
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants